﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using MJM.CBD.Conn;
using MJM.SPP.EntidadesNegocio;

namespace MJM.SPP.AccesoDatos
{
    public class ModuloAD
    {
        public List<ModuloEN> Listar(int idPrograma)
        {
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_s_T_WEB_OPTGEN_Listar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader dr;
            List<ModuloEN> lst = new List<ModuloEN>();
            SqlParameter prmidPrograma;
            try
            {
                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@vPROMUN_inID";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = idPrograma;
                cmd.Parameters.Add(prmidPrograma);

                cmd.Connection.Open();
                dr = cmd.ExecuteReader();
                ModuloEN obj;
                while (dr.Read())
                {
                    obj = new ModuloEN();
                    obj.OPTGEN_P_inID = dr.GetInt32(0);
                    obj.PROMUN_inID = dr.GetInt32(1);
                    obj.OPTGEN_chNOMMEN = dr.GetString(2);
                    obj.OPTGEN_chDESMEN = dr.GetString(3);
                    obj.SEGU_inFLAELI = dr.GetInt32(4);
                    obj.Codigo = dr.GetString(5);
                    lst.Add(obj);
                }

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return lst; 
        }

        public ModuloEN ObtenerModulo(int IDOpcion,int idPrograma)
        {
            ModuloEN objModuloEN = new ModuloEN();
            List<ModuloEN> lst = Listar(idPrograma);
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].OPTGEN_P_inID == IDOpcion)
                    objModuloEN = lst[i];
            }
            return objModuloEN;
        }

        public int Insertar(ModuloEN obj)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_i_T_WEB_OPTGEN_Insertar", conn);
            cmd.CommandType=CommandType.StoredProcedure;
            SqlParameter prmNombre, prmDescripcion, prmidPrograma,prmidModulo,prmCodigo;
            try
            {
                prmDescripcion = cmd.CreateParameter();
                prmDescripcion.ParameterName = "@vOPTGEN_chDESMEN";
                prmDescripcion.SqlDbType = SqlDbType.VarChar;
                prmDescripcion.Value = obj.OPTGEN_chDESMEN;
                cmd.Parameters.Add(prmDescripcion);

                prmNombre = cmd.CreateParameter();
                prmNombre.ParameterName = "@vOPTGEN_chNOMMEN";
                prmNombre.SqlDbType = SqlDbType.VarChar;
                prmNombre.Value = obj.OPTGEN_chNOMMEN;
                cmd.Parameters.Add(prmNombre);

                prmCodigo = cmd.CreateParameter();
                prmCodigo.ParameterName = "@vOPTGEN_chCODGEN";
                prmCodigo.SqlDbType = SqlDbType.VarChar;
                prmCodigo.Value = obj.Codigo;
                cmd.Parameters.Add(prmCodigo);

                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@vPROMUN_inID";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = obj.PROMUN_inID;
                cmd.Parameters.Add(prmidPrograma);

                prmidModulo = cmd.CreateParameter();
                prmidModulo.Direction = ParameterDirection.ReturnValue;
                prmidModulo.SqlDbType = SqlDbType.Int;
                cmd.Parameters.Add(prmidModulo);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = Convert.ToInt32(prmidModulo.Value);

                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return codigo;
        }

        public int Modificar(ModuloEN obj)
        {
            int codigo = 0;
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_OPTGEN_Modificar", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmNombre, prmDescripcion, prmidPrograma, prmidModulo, prmCodigo;
            try
            {
                prmDescripcion = cmd.CreateParameter();
                prmDescripcion.ParameterName = "@vOPTGEN_chDESMEN";
                prmDescripcion.SqlDbType = SqlDbType.VarChar;
                prmDescripcion.Value = obj.OPTGEN_chDESMEN;
                cmd.Parameters.Add(prmDescripcion);

                prmNombre = cmd.CreateParameter();
                prmNombre.ParameterName = "@vOPTGEN_chNOMMEN";
                prmNombre.SqlDbType = SqlDbType.VarChar;
                prmNombre.Value = obj.OPTGEN_chNOMMEN;
                cmd.Parameters.Add(prmNombre);

                prmCodigo = cmd.CreateParameter();
                prmCodigo.ParameterName = "@vOPTGEN_chCODGEN";
                prmCodigo.SqlDbType = SqlDbType.VarChar;
                prmCodigo.Value = obj.Codigo;
                cmd.Parameters.Add(prmCodigo);

                prmidPrograma = cmd.CreateParameter();
                prmidPrograma.ParameterName = "@vOPTGEN_P_inID";
                prmidPrograma.SqlDbType = SqlDbType.Int;
                prmidPrograma.Value = obj.OPTGEN_P_inID;
                cmd.Parameters.Add(prmidPrograma);

                prmidModulo = cmd.CreateParameter();
                prmidModulo.ParameterName = "@vSEGU_inFLAELI";
                prmidModulo.SqlDbType = SqlDbType.Int;
                prmidModulo.Value = obj.SEGU_inFLAELI;
                cmd.Parameters.Add(prmidModulo);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                codigo = 1;
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                cmd.Dispose();
                conn.Dispose();
            }
            return codigo;
        }

        public int Mover(int IdPrograma, int IdModulo)
        {
            SqlConnection conn = new SqlConnection(Cadena.GetCadenaPadron());
            SqlCommand cmd = new SqlCommand("sp_u_T_WEB_OPTGEN_CambProg", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter prmIdPrograma, prmIdModulo;
            int result=1;
            try
            {
                prmIdModulo = cmd.CreateParameter();
                prmIdModulo.ParameterName = "@vIdModulo";
                prmIdModulo.SqlDbType = SqlDbType.Int;
                prmIdModulo.Value = IdModulo;
                cmd.Parameters.Add(prmIdModulo);

                prmIdPrograma = cmd.CreateParameter();
                prmIdPrograma.ParameterName = "@vIdPrograma";
                prmIdPrograma.SqlDbType = SqlDbType.Int;
                prmIdPrograma.Value = IdPrograma;
                cmd.Parameters.Add(prmIdPrograma);

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            catch(Exception ex)
            {
                result = 0;
                cmd.Dispose();
                conn.Dispose();
            }
            return result;
        }
    }
}
